package io.sage.modules.employer.enums;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.*;

/**
 * 用户授权试用时间枚举.
 */
public enum StudentManagerUseTimeTypeEnum {
    no_trial(1, "无试用"),
    trial_3_days(10, "试用3天"),
    one_month(20, "一个月"),
    one_quarter(30, "一个季度"),
    one_year(40, "一年");

    private static final Logger logger = LoggerFactory.getLogger(StudentManagerUseTimeTypeEnum.class);

    private Integer code;
    private String message;



    // 通过枚举获取授权终止时间.
    public static Date getStopTime(StudentManagerUseTimeTypeEnum typeEnum) {
        Calendar nowC = Calendar.getInstance();
        if (typeEnum != null) {
            if (typeEnum.getCode().equals(1)) {
                // 无试用.
            } else if (typeEnum.getCode().equals(10)) {
                // 使用3天.
                nowC.add(Calendar.DAY_OF_YEAR, 3);
            } else if (typeEnum.getCode().equals(20)) {
                // 使用一个月.
                nowC.add(Calendar.MONTH, 1);
            } else if (typeEnum.getCode().equals(30)) {
                // 使用一个季度，也就是3个月.
                nowC.add(Calendar.MONTH, 3);
            } else if (typeEnum.getCode().equals(40)) {
                // 使用一年.
                nowC.add(Calendar.YEAR, 1);
            }
        }
        return nowC.getTime();
    }

    // 通过枚举code获取授权终止时间.
    public static Date getStopTime(Integer useTimeTypeCode) {
        Calendar nowC = Calendar.getInstance();
        if (useTimeTypeCode != null) {
            if (useTimeTypeCode.equals(1)) {
                // 无试用.
            } else if (useTimeTypeCode.equals(10)) {
                // 使用3天.
                nowC.add(Calendar.DAY_OF_YEAR, 3);
            } else if (useTimeTypeCode.equals(20)) {
                // 使用一个月.
                nowC.add(Calendar.MONTH, 1);
            } else if (useTimeTypeCode.equals(30)) {
                // 使用一个季度，也就是3个月.
                nowC.add(Calendar.MONTH, 3);
            } else if (useTimeTypeCode.equals(40)) {
                // 使用一年.
                nowC.add(Calendar.YEAR, 1);
            } else {
                logger.error("StudentManagerUseTimeTypeEnum 输入的枚举code不存在，授权试用时间可能有误，code为：" + useTimeTypeCode);
            }
        }
        return nowC.getTime();
    }

    // 通过枚举code和当前授权终止时间，计算新的授权终止时间.
    public static Date getStopTime(Date stopTimeOld, Integer useTimeTypeCode) {
        Calendar nowC = Calendar.getInstance();
        if (stopTimeOld.getTime() > new Date().getTime()) {
            // 原始的授权结束时间大于当前时间.
            // 设置计算开始时间为原始的授权结束时间.
            nowC.setTime(stopTimeOld);
        }
        if (useTimeTypeCode != null) {
            if (useTimeTypeCode.equals(1)) {
                // 无试用.
                return stopTimeOld;
            } else if (useTimeTypeCode.equals(10)) {
                // 使用3天.
                nowC.add(Calendar.DAY_OF_YEAR, 3);
            } else if (useTimeTypeCode.equals(20)) {
                // 使用一个月.
                nowC.add(Calendar.MONTH, 1);
            } else if (useTimeTypeCode.equals(30)) {
                // 使用一个季度，也就是3个月.
                nowC.add(Calendar.MONTH, 3);
            } else if (useTimeTypeCode.equals(40)) {
                // 使用一年.
                nowC.add(Calendar.YEAR, 1);
            } else {
                logger.error("StudentManagerUseTimeTypeEnum 输入的枚举code不存在，授权试用时间可能有误，code为：" + useTimeTypeCode);
            }
        }
        return nowC.getTime();
    }

    public static List<HashMap<String, Object>> getList() {
        List<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
        StudentManagerUseTimeTypeEnum[] values = StudentManagerUseTimeTypeEnum.values();
        for (StudentManagerUseTimeTypeEnum  useTimeTypeEnum: values) {
            HashMap map = new HashMap<String, Object>();
            map.put("code", useTimeTypeEnum.getCode());
            map.put("message", useTimeTypeEnum.getMessage());
            list.add(map);
        }
        return list;
    }


    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    StudentManagerUseTimeTypeEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

}
